import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { get_token, set_token, remove_token, set_timeStamp } from '@/utils/auth'
import { resetRouter } from '@/router'

const state = {
  token: get_token(),
  userInfo: null //
}
const mutations = {
  setToken(state, token) {
    state.token = token
    // 本地持久化
    set_token(token)
  },
  removeToken(state) {
    state.token = null
    // 本地持久化
    remove_token()
  },
  setUserInfo(state, data) {
    state.userInfo = data
  },
  removeUserInfo(state) {
    state.userInfo = null
  }
}

const actions = {
  // 登录方法
  async login(context, data) {
    const res = await login(data)
    context.commit('setToken', res)
    set_timeStamp() // 保存token存入时的时间戳
  },
  // 获取用户信息
  async getUserInfo(context) {
    const info = await getUserInfo()
    const detail = await getUserDetailById(info.userId)
    const baseResult = {...info, ...detail} //合并用户信息和详细信息
    context.commit('setUserInfo', baseResult)
    return baseResult
  },

  // 退出登录
  logout(context) {
    // 移除token并清除用户信息
    context.commit('removeToken')
    context.commit('removeUserInfo')
    // 重置路由为默认静态路由
    resetRouter() 
    // 重置vuex中的路由数据
    // 设置namespaced: true的情况下, 在一个子模块中调用另一个子模块的mutation方法，需要第三个参数{root: true}
    //context.commit('permission/setRoutes', [], {root: true})
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

